import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';

import { DbModule } from '@app/db';
import { RsaModule } from '@app/rsa';
import { UserModule } from './user/user.module';
import { AuthModule } from './auth/auth.module';
import { APP_GUARD } from '@nestjs/core';
import { JwtGuard } from './auth/jwt.guard';
import { RoleGuard } from './auth/role.guard';

@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: [
        '.env.development.local',
        '.env.development',
        '.env.local',
        '.env',
      ],
    }),

    DbModule,
    RsaModule,
    UserModule,
    AuthModule,
  ],
  controllers: [AppController],
  providers: [
    AppService,
    // 使用全局 jwt 守卫
    // 这样所有的路由都需要进行 token 校验
    // 但是可以使用 PublicRoute 忽略
    { provide: APP_GUARD, useClass: JwtGuard },

    // 注册角色守卫
    { provide: APP_GUARD, useClass: RoleGuard },
  ],
})
export class AppModule {}
